Regole con script
In questa sezione:
Informazioni sulle regole con script
Le regole con script consentono la creazione di regole personalizzate mediante Windows PowerShell o VB Scripts. Il successo o il fallimento dello Script determina se il livello di sicurezza, gli elementi consentiti e gli elementi negati che fanno parte della regola si applichino all'utente.
Le regole scriptate possono sfruttare qualsiasi interfaccia accessibile tramite PowerShell o VBScript, come COM (Component Object Model).
Ciascuno script viene valutato nelle seguenti circostanze:
- Quando una nuova configurazione viene distribuita nel computer.
- Quando un utente effettua l'accesso.
Per creare o modificare script passare al Set di regole con script richiesto nell'Editor configurazione di Controllo applicazioni. Set di regole > Con script > [Nome set di regole]
È possibile definire quando debba essere eseguito lo script usando le seguenti Opzioni per le regole con script:
- Esegui script:
- Per sessione come utente - Lo script viene eseguito per ciascun utente che effettua l'accesso. Le impostazioni vengono applicate solo per la durata della sessione utente.
- Per sessione come SISTEMA - Lo script viene eseguito con autorizzazioni account di SISTEMA una volta per ciascun utente che effettua l'accesso. Le impostazioni vengono applicate solo per la durata della sessione utente.
- Per computer come SISTEMA - Lo script viene eseguito con autorizzazione account di SISTEMA una volta all'avvio del computer. Le impostazioni vengono applicate a tutte le sessioni utente fino al riavvio del computer, il riavvio dell'agente Controllo applicazioni o la modifica a una configurazione.
- Attendi completamento accesso - Selezionare per impedire allo script di essere eseguito fino al completamento dell'accesso utente.
Attenzione: l'esecuzione di script come utente di SISTEMA può provocare gravi danni al computer e deve essere consentito solo da autori di script con esperienza.
VBScript
Ciascun script viene eseguito all'interno di un motore di script ospitato che consente un maggiore controllo sull'esecuzione dello script, fornendo allo stesso tempo un grado elevato di controllo per input e output.
- Non viene utilizzato alcun file VBS.
- Non viene diffuso al processo separato.
Uno script deve essere scritto come una funzione e può contenere molte funzioni, ma è necessario specificare una funzione di avvio principale. La funzione di avvio viene eseguita dall'agente Controllo applicazioni e può essere utilizzata per richiamare altre funzioni.
L'oggetto AMScriptRule COM viene integrato nel motore di script e fornisce accesso ai seguenti metodi:
strUsername = AMScriptRule.UserName
strUserdomain = AMScriptRule.UserDomain
strSessionid = AMScriptRule.SessionID
strStationname = AMScriptRule.WinStation
Lo standard Microsoft in questa istanza significa che WinStation restituisce il valore del nome della sessione di Servizi terminal, determinata dal tipo di sessione i cui valori tipici sono ’Console’ o ’RDP-Tcp#34’, invece del nome della Stazione Windows che corrisponde in genere a WinSta0.
L'oggetto AMScriptRule COM include anche i seguenti metodi:
strLog = AMScriptRule.Log "Istruzione registro personale"
Consente di generare stringhe di registrazione nel file di registro agenti per l'uso con regole con script di debugging.
strEnvironmentvar = AMScriptRule.ExpandEnvironment ("%MyEnvironmentVariables%")
Espande le variabili di ambiente dell'utente che esegue lo script.
L'utilizzo della shell WScript. per espandere le variabili d'ambiente restituisce solo le variabili SYSTEM.
Script di Windows PowerShell
Se lo script restituisce (esce) con un valore di 0, lo script verrà superato e le regole verranno applicate. Se viene restituito qualsiasi valore diverso da zero, lo script verrà annullato e le regole non verranno applicate.
Ciascuno script PowerShell viene eseguito in un'istanza di PowerShell.exe e come tale Controllo applicazioni non impone né aggiunge alcuna sintassi specifica – ogni PowerShell correttamente formato funzionerà.
PowerShell deve essere installato su qualsiasi endpoint che utilizzerà lo script.
Script campione
Il seguente VBScript mostra come controllare le applicazioni a cui un utente ha accesso.
Function ScriptedRule()
’Name of Filter scan expected to pass
ExpectedFilter = "FWALL"
’Get Server Name
Set objNTinfo = CreateObject ("WinNTSystemInfo")
ServerName = lcase (objNTInfo.ComputerName)
’Set initial return value
ScriptedRule = False
’Create MetaFrame Session Object
Set MFSession = Createobject ("MetaFrameCOM.MetaFrameSession")
’Initialize the session filters for this session
For Each x in MFSession.SmartAccessFilters
’return true if our filter is found
If x = ExpectedFilter Then
ScriptedRule=True
AMScriptRule.Log "SmartAccessFilter match found."
End If
Next
End Function
Il seguente VBScript può essere utilizzato per determinare se un computer si trova in un'unità organizzativa di computer:
Function ScriptedRule()
ScriptedRule = vbFalse
strCompName = AMScriptRule.StationName
Set oRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = oRootDSE.Get("DefaultNamingContext")
Set oOU = GetObject("LDAP://OU=TheOUyouAreSearching,OU=Parent,OU=Parent," & strDNSDomain)
oOU.GetInfo
For each member in oOU
If UCase(strCompName) = UCase(member.CN) Then
ScriptedRule = vbTrue
Exit For
End If
Next
End Function
Il seguente campione di VBScript mostra i componenti principali di uno script e dimostra come accedere alle informazioni sul nome utente dell'utente registrato sul sistema, dopodiché le fa corrispondere a un dominio specifico e a un'unità organizzativa:
Function MyScript()
'Get the username of the user logging in (also works when running as SYSTEM)
strUserName = AMScriptRule.UserName
'Get the domain of the user logging in (also works when running as SYSTEM)
strUserDomain = AMScriptRule.UserDomain
'Look up user environment variables (when running as SYSTEM, only SYSTEM variables are available)
strClientName = AMScriptRule.ExpandEnvironment ("%ClientName%")
'Log the output
AMScriptRule.Log strUserName & " logged in on " & strClientName
'Check if the user is a member of the domain
If strUserdomain = "MyDomain" Then
'If so, see if the user is in the MyOU OU
Set objOU = GetObject ("LDAP://ou=MyOU,dc=MyDomain,dc=com")
objOU.Filter = Array("user")
For Each objUser In objOU
'Check if there is a match with the user logging on
If objUser.sAMAccountName = strUserName Then
'if there is, then set the function to True
MyScript = True
End If
Next
End If
'Unless there is a username match, the function defaults to False
End Function
Lo script del seguente campione Windows PowerShell mostra i componenti principali di uno script e dimostra come accedere alle informazioni sul nome utente dell'utente registrato sul sistema, dopodiché le fa corrispondere a un dominio specifico e a un'unità organizzativa:
#Script checks if the current user is a member of the OU specified
# Return 0 if TRUE
# 1 otherwise
$logonuser = $env:username
$bindpt = [adsi] "LDAP://OU=TS_Users,OU=Users,OU=MyUser,OU=MyOU,DC=MyDomain,DC=com"
$users = New-Object System.DirectoryServices.DirectorySearcher $bindpt
$users.Filter = "(&(objectClass=User)(sAMAccountName=$logonuser))"
$obj = $users.FindOne()
if($obj -eq $null)
{
#" Not a Member"
exit 1
}